/**
 * @file debug_cli.h
 * @brief 调试命令行界面
 * @author VimLVM Team
 * @date 2025
 */

#pragma once

#include "viml/vm.h"
#include "viml/compiler.h"
#include <string>
#include <memory>

namespace viml {

/**
 * @brief 调试命令行界面
 */
class DebugCLI {
public:
    DebugCLI();
    ~DebugCLI() = default;
    
    /**
     * @brief 启动调试器
     */
    void run();
    
    /**
     * @brief 加载文件进行调试
     */
    bool load_file(const std::string& filename);
    
private:
    std::unique_ptr<VM> vm_;
    std::unique_ptr<Compiler> compiler_;
    std::string current_file_;
    bool running_ = false;
    
    /**
     * @brief 显示帮助信息
     */
    void show_help();
    
    /**
     * @brief 处理调试命令
     */
    void handle_command(const std::string& command);
    
    /**
     * @brief 显示源代码
     */
    void show_source(size_t line, size_t context = 5);
    
    /**
     * @brief 显示变量
     */
    void show_variables();
    
    /**
     * @brief 显示调用栈
     */
    void show_call_stack();
    
    /**
     * @brief 显示断点列表
     */
    void show_breakpoints();
};

} // namespace viml